import ajax from '@/uni_modules/u-ajax/js_sdk'
import {
	removeUserinfo,
	getToken
} from "@/common/user.js"
import {
	getUserIdentity,
	rgoto,
	setToast,
	setUserIdentity
} from './utils'
// code码处理
import httpInterception from './httpInterception';
// 线上
import {
	ENV as PRO_ENV
} from '../env/production';
// 测试
import {
	ENV as TEST_ENV
} from '../env/test';
// 开发
import {
	ENV as DEV_ENV
} from '../env/dev';

// 默认开发环境dev
const type = process.env.H_NODE_ENV
export const getEnv = () => {
	switch (type) {
		case 'dev':
			return DEV_ENV;
		case 'test':
			return TEST_ENV;
		case 'pro':
			return PRO_ENV;
		default:
			return null;
	}
};

// 接口前缀
export const baseURL = getEnv()['baseURL']
// 上传文件接口
export const baseFilesURL = getEnv()['baseFilesURL']
// 文件系统访问
export const baseFilesVisitURL = getEnv()['baseFilesVisitURL']

// 创建请求实例
const instance = ajax.create({
	baseURL
})

// 添加请求拦截器
instance.interceptors.request.use(
	config => {
		// 请求之前动态设置一下当前的角色信息，防止同时打开多个菜单导致token冲突
		setUserIdentity();
		let _token = {
			'Cache-Id': getToken()
		};
		config.header = Object.assign({}, config.header, _token)
		return config
	},
	error => {
		return Promise.reject(error)
	}
)

// 添加响应拦截器
instance.interceptors.response.use(
	response => {
		const res = response.data
		if (res.code == 1) {
			return res
		} else {
			console.log('这里');
			httpInterception(res)
			throw Error('异常')
		}
	},
	error => {
		httpInterception({
			code: error.statusCode,
			msg: '服务器出错'
		})
		return Promise.reject(error)
	}
)
// url 地址
// data 参数
// isParams 是否是表单请求
// config 其他配置  默认post请求
const request = (url, data, isParams, config = {
	method: "POST"
}) => {
	const settings = {
		url,
		[isParams ? 'params' : 'data']: data,
		...config
	}
	return instance(settings)
}

export default request